import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import json
geojson = json.load(open('uk_regions_map.geojson','r'))
data = pd.read_csv('EU-referendum-result-data.csv')
data
region = data.groupby(['Region'])['Votes_Cast','Remain','Leave','Rejected_Ballots'].sum()
region['Pct_Remain'] = region['Remain']/region['Votes_Cast']*100
region['Pct_Leave'] = region['Leave']/region['Votes_Cast']*100
region['Pct_Rejected'] = region['Rejected_Ballots']/region['Votes_Cast']*100
region.sort_values(by=['Votes_Cast'],inplace=True)
region['Name'] = region.index
region
fig = go.Figure()
l = ['Pct_Remain','Pct_Leave','Pct_Rejected']
for i in l:
fig.add_trace(go.Bar(
x=region[i],
y=region.index,
orientation='h',
name=i,
opacity=0.8))
fig.update_layout(barmode='stack')
fig.show()
geojson['features'][0]['properties']
map_id={}
for feature in geojson['features']:
feature['id'] = feature['properties']['cartodb_id']
map_id[feature['properties']['name']] = feature['id']
region['id'] = region['Name'].apply(lambda x: map_id[x])
fig = px.choropleth(region,
locations='id',
geojson=geojson,
color='Pct_Leave',
hover_name='Name',
color_continuous_scale = px.colors.diverging.BrBG,
color_continuous_midpoint = 50
)
fig.update_geos(fitbounds='locations',visible=False)
fig.show()